import os
import re
import sys

# 说明：
# 1.为修改xxx.png/xxx@2x.png/xxx@3x.png 格式的图片而写的脚本，
#   能保证一组图片被修改为同一个名称。
# 2.脚本执行后直接修改原来图片的名称。
#
# 使用：
# 1.脚本拖到所在图片同一个目录下或者脚本后面追加图片路径作为参数执行。
# 2.使用时可以在命令行中传递文件夹路径、前缀和后缀作为参数。
#   例如：python script.py ./images prefix_ _suffix
#   如果不需要前缀或后缀，可以将其留空。

def rename_images(folder_path, new_names, prefix="", suffix=""):
    # 确保 new_names 不是空的
    if not new_names:
        print("没有可用的替换名称。")
        return

    # 获取脚本名称，避免重命名自己
    script_name = os.path.basename(__file__)

    # 用于存储匹配的文件名
    name_map = {}

    # 遍历文件夹及其子文件夹中的文件
    for dirpath, _, filenames in os.walk(folder_path):
        for filename in filenames:
            # 检查文件名是否为脚本本身
            if filename == script_name:
                continue

            # 匹配文件名，捕获基础名称、@2x/@3x 和扩展名
            match = re.match(r'^(.*?)(@2x|@3x)?(\..+)$', filename)
            if match:
                base_name = match.group(1)
                suffix_part = match.group(2) if match.group(2) else ''
                ext = match.group(3)

                # 将文件名按基础名称分组
                if base_name not in name_map:
                    name_map[base_name] = []
                name_map[base_name].append((os.path.join(dirpath, filename), suffix_part, ext))

    # 开始重命名
    for base_name, files in name_map.items():
        if new_names:
            new_base_name = new_names.pop(0)
            for original_path, suffix_part, ext in files:
                # 生成新名称，添加前缀和后缀
                new_name = f"{prefix}{new_base_name}{suffix}{suffix_part}{ext}"
                new_path = os.path.join(os.path.dirname(original_path), new_name)

                # 重命名文件
                os.rename(original_path, new_path)
                print(f"重命名: {original_path} -> {new_path}")
        else:
            print("替换名称已用完，停止重命名。")
            break

if __name__ == "__main__":
    # 默认前缀和后缀，可以在此修改
    default_prefix = "your_prefix"  # 修改为默认前缀
    default_suffix = "your_suffix"  # 修改为默认后缀

    # 获取文件夹路径、前缀和后缀参数
    folder_path = sys.argv[1] if len(sys.argv) > 1 else os.getcwd()
    prefix = sys.argv[2] if len(sys.argv) > 2 else default_prefix
    suffix = sys.argv[3] if len(sys.argv) > 3 else default_suffix

    new_names = [
        "beach_towel",
        "boogie_board",
        "hello"
    ]  # 根据需要替换为你的名称数组

    rename_images(folder_path, new_names, prefix=prefix, suffix=suffix)
